package Leetcode.排序;

import java.util.Arrays;
import java.util.Random;

public class ShellSort {
    //核心代码---开始
    public static void sort(Integer[] arr) {
        int j;
        // 外层循环控制增量（gap）的变化，初始值是数组长度的一半，每次循环后缩小为原来的一半
        for (int gap = arr.length / 2; gap > 0; gap /= 2) {
            // 内层循环从增量的位置开始，遍历数组中的元素
            for (int i = gap; i < arr.length; i++) {
                // 保存当前要插入的元素
                int tmp = arr[i];
                // 内部循环执行插入排序，找到当前元素应该插入的位置
                // j 从当前元素的位置开始，每次减去增量，直到找到正确的位置
                for (j = i; j >= gap && tmp < arr[j - gap]; j -= gap) {
                    // 将比当前元素大的元素向后移动
                    arr[j] = arr[j - gap];
                }
                // 将当前元素插入到正确的位置
                arr[j] = tmp;
            }
        }
    }

    //核心代码---结束
    public static void main(String[] args) {
//        Comparable a = 10;
//        System.out.println(a.compareTo(11));
        int N =8;
        Integer[] arr = SortUtils.generateRandomArray(N, 0, 10);
        System.out.println(Arrays.toString(arr));
        ShellSort.sort(arr);
        System.out.println(Arrays.toString(arr));
    }


}